package com.cskaoyan.javase.oop1._13block._3static;

/**
 * 静态代码块
 * 语法:
 * 声明在类的成员位置,用以下语法定义:
 * // 成员位置
 * static{
 *
 * }
 * // 成员位置
 * 作用:
 *      在类加载的过程中被执行,相当于一个在类加载过程中被自动调用的静态成员方法
 *      是来在类加载过程中,给类的静态成员变量赋值
 *
 * 总结目前为止,在类加载时期,给类的静态成员变量赋值的手段:
 *      1.默认初始化,具有默认值(永远最先进行)
 *      2.显式赋值
 *      3.静态代码块赋值
 *
 * 显式赋值和静态代码块赋值,也是按照代码的书写顺序从上往下执行的
 * 静态代码块这种执行机制,是Java类加载的机制保证的
 *
 * 静态代码块在实际开发中，并不常见。根据它的一些特点，可以总结一下它的使用场景
 *
 *      1.复杂的静态成员变量的赋值。
 *      JavaEE中加载JDBC驱动（最经典的），也可能是最常见的。
 *
 *      2.如果有一段代码，在类的全局，从始至终，只运行一次，可以写到静态代码块中。
 *      （依赖于类加载只有一次的原理）
 *      类加载只有一次,类的静态代码块也最多执行一次,不可能执行两次.
 *  比如一些初类的始化工作，就可以放在静态代码块中完成。
 *
 * @since 16:13
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(Student.schoolName);
    }
}

class Student {

    static {
        schoolName = "Java41th";
    }
    static String schoolName = "王道训练营";


}